Encoder.c

					
#include "Encoder.h"
#include <stdio.h>

/* Initialisation of the encoder_t structure
 *  Arguments:
 *  _pin1 - First pin of the encoder (MCU Pin)
 *  _pin2 - Second pin of the encoder (MCU Pin)
 */
void init_encoder(encoder_t* Encoder, pin_t _pin1, pin_t _pin2)
{
  Encoder->pin1 = _pin1;
  Encoder->pin2 = _pin2;

  /******* MCU PINS SETTING ********/
  pin_mode(_pin1, INPUT);
  pin_mode(_pin1, INPUT);
}

/* Read encoder Pins
 *  
 */
void update_enc_state(encoder_t* Encoder)
{
  Encoder->dir = (pin_read(Encoder->pin2) << 1);
  Encoder->dir |= pin_read(Encoder->pin1);

  switch(Encoder->dir)
  {
    case R_TICK:
    {
      if(!Encoder->tick_registered)
      {
        Encoder->ticks_RIGHT++;
        Encoder->tick_registered = HIGH;
      }
    }break;
    case L_TICK:
    {
      if(!Encoder->tick_registered)
      {
        Encoder->ticks_LEFT++;
        Encoder->tick_registered = HIGH;
      }
    }break;
    case NO_TICK:
    {
      Encoder->tick_registered = LOW;
    }break;
  }
}

/* More for debug purposes
 *  
 */
/*void print_enc_state(encoder_t* Encoder)
{
	char str[16];
	
	sprintf(str, "Enc State: ");
	print_str(str);
	
  switch(Encoder->dir)
  {
    case R_TICK:
    {
	  sprintf(str, "R_TICK\n");
	  print_str(str);
    } break;
    case L_TICK:
    {
	  sprintf(str, "L_TICK\n");
	  print_str(str);
    } break;
    case NO_TICK:
    {
	  sprintf(str, "NO_TICK\n");
	  print_str(str);
    } break;
    default: 
    {
      sprintf(str, "%d", Encoder->dir);
	  print_str(str);
    }
  }
} */